package com.dp.prototype;

/**
 * <p>Title: 原型模式-浅克隆</p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2018</p>
 * <p>Company: wylCloud.com</p>
 *
 * @author wangyl
 * @version 1.0
 * @date 2020/7/2
 */
public class PrototypeClone implements Cloneable {

    /*****
     * 是用于创建重复的对象，同时又能保证性能。这种类型的设计模式属于创建型模式，它提供了一种创建对象的最佳方式。
     *
     *
     * 这种模式是实现了一个原型接口，该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时，则采用这种模式。
     * 例如，一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象，在下一个请求时返回它的克隆，在需要的时候更新数据库，以此来减少数据库调用。
     *
     * 由于 Java 提供了对象的 clone() 方法，所以用 Java 实现原型模式很简单。
     *
     * 1. 模式的结构
     *     原型模式包含以下主要角色。
     *      抽象原型类：规定了具体原型对象必须实现的接口。
     *      具体原型类：实现抽象原型类的 clone() 方法，它是可被复制的对象。
     *      访问类：使用具体原型类中的 clone() 方法来复制新的对象。
     *
     */

    public PrototypeClone(){
        System.out.println("浅克隆原型创建成功！");
    }

    /***
     * 克隆
     * @return
     * @throws CloneNotSupportedException
     */
    public Object clonePropery() throws CloneNotSupportedException {
        System.out.println("具体原型复制成功！");
        return super.clone();
    }
}